function add<T>(num1: T, ...args: T[]): T {
  return num1;
}

add<number>(123, 1, 2);

// 在定义接口时也可以使用泛型
// 可以设置默认的 类型
interface i_obj<T = number, E = string> {
  username: T;
  age: E;
}

let obj: i_obj<string, number> = {
  // 如果有默认的可以不输入类型
  username: "string",
  age: 18,
};

// 在类上使用泛型
class Person<X, Y> {
  username: X;
  age: Y;
  constructor(username: X, age: Y) {
    this.username = username;
    this.age = age;
  }
}

let p = new Person<string, number>("jjj", 18);

export {};
